// Keywords: continuous space, continuous spatial landscape, reprising boundaries

initialize() {
	initializeSLiMOptions(dimensionality="xy");
	initializeMutationRate(1e-7);
	initializeMutationType("m1", 0.5, "f", 0.0);
	initializeGenomicElementType("g1", m1, 1.0);
	initializeGenomicElement(g1, 0, 99999);
	initializeRecombinationRate(1e-8);
	
	// spatial competition
	initializeInteractionType(1, "xy", reciprocal=T, maxDistance=0.3);
	i1.setInteractionFunction("n", 3.0, 0.1);
	
	// spatial mate choice
	initializeInteractionType(2, "xy", reciprocal=T, maxDistance=0.1);
	i2.setInteractionFunction("n", 1.0, 0.02);
}
1 late() {
	sim.addSubpop("p1", 500);
	p1.individuals.setSpatialPosition(p1.pointUniform(500));
}
1: late() {
	i1.evaluate(p1);
	inds = sim.subpopulations.individuals;
	competition = i1.totalOfNeighborStrengths(inds);
	inds.fitnessScaling = 1.1 - competition / size(inds);
}
2: first() {
	i2.evaluate(p1);
}
mateChoice() {
	// spatial mate choice
	return i2.strength(individual);
}
modifyChild() {
	do pos = parent1.spatialPosition + rnorm(2, 0, 0.02);
	while (!p1.pointInBounds(pos));
	child.setSpatialPosition(pos);
	
	return T;
}
2000 late() { sim.outputFixedMutations(); }
